package com.shujia.day18;

//import com.alibaba.fastjson2.JSON;
//import com.alibaba.fastjson2.JSONArray;
//import com.alibaba.fastjson2.JSONObject;
//import com.alibaba.fastjson2.JSONPath;

import java.util.List;

public class Code03Json {
    public static void main(String[] args) {
        /*
            Json文件：
               Json实际上表现的是一个对象，其中数据是由{}来限定其范围，在{}内部可以给定其KeyValue数据

               注意：
                    1.对于Key只能为一个字符串
                    2.Value 可以为
                            字符串
                            小数
                            正数
                            []来表示一个数组
                            {}来表示value是一个对象
                    3.对于Key要求同一级的名称不能重复
                    4.对JSON的Value值进行获取，需要先获取Key
                        JsonObject.name => 张东东
                        JSONObject.key1 => 2.3
                        JSONObject.key2[1] =>  23  :如果Key取到的Value是一个数组那么可以根据其下标进行取值
                        JSONObject.key3.age => 18
                        JSONObject.key4[0].游戏时长 => 3

                    5.对于开发过程中，有时可以是一行代表一个对象，用{}来对该对象中的内容进行限制
         */

        String jsonStr = "{\"name\":\"柏杨\",\"住址\":\"英唐工业园\"}";
        // 将字符串转换成一个Json对象
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        String name = jsonObject.getString("name");
        String address = jsonObject.getString("住址");
        System.out.println(name);
        System.out.println(address);

        String jsonStr2 = "{'name':'钱雨阳','address':'英唐工业园'}";
        JSONObject jsonObject2 = JSON.parseObject(jsonStr2);
        String name1 = jsonObject2.getString("name");
        System.out.println(name1);


        // 将给定的字符串转换成一个User对象
        User user = JSON.parseObject(jsonStr2, User.class);
        System.out.println(user);


        // 给定的Json是一个数组，那么如何将字符串转成一个对象数组
        String s = "[{'name':'黄青平','address':'肥西'},{'name':'张从文','address':'滨湖新区'}]";

//        JSONArray objects = JSON.parseArray(s);
//        Object o = objects.get(1);
//        System.out.println();

//        List<User> users = JSON.parseArray(s, User.class);
//        for (User user1 : users) {
//            System.out.println(user1);
//        }

        // 将字符串转换成一个JSON数组之后再通过getJSONObject获取每个JSON的对象
        JSONArray objects = JSON.parseArray(s);
        JSONObject jsonObject1 = objects.getJSONObject(1);
        String name2 = jsonObject1.getString("name");
        System.out.println(name2);

        // 将Value中的JSON数组转成一个对象列表
        System.out.println("=====================");
        String users = "{'users':[{'name':'黄青平','address':'肥西'},{'name':'张从文','address':'滨湖新区'}]}";
        JSONObject jsonObject3 = JSON.parseObject(users);
        JSONArray users1 = jsonObject3.getJSONArray("users");
        List<User> users2 = users1.toList(User.class);
        for (User user1 : users2) {
            System.out.println(user1);
        }

        // 作业：读取jsonFile.json文件 并将其转换成一个对象 获取其中key4对应的内容
    }
}

class User{
    String name;
    String address;

    public User(String name, String address) {
        this.name = name;
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
